﻿// Inner Fire 游戏引擎库
// Texture - 贴图
//
// Copyright (c) 2025 by 尔西大帝. All rights reserved.
//
// 所属层级：应用层(4)
// 贴图的资源。对应每一个图片。
//
// Author: 尔西大帝
// Email: 2670613871@qq.com
// Created: 2025-01-14

#pragma once

#include <game/resource/resource.h>
#include <xml_reader.h>

namespace ifire::game {
class Assets;

class Texture : public Resource {
public:
  Texture(Assets* manager, const ikit::XmlNode& node);
  Texture(const Texture& lhs) = delete;
  Texture& operator=(const Texture& lhs) = delete;
  ~Texture() = default;

  // 这个没有实际意义，只是为了匹配泛型
  void Ready() {}

  //
  // 属性访问
  //
  inline dx::DxTexture* GetTexture() const { return texture_; }
  inline void SetTexture(dx::DxTexture* texture) { texture_ = texture; }
  inline dx::TextureType Type() const { return type_; }
  inline const std::string& Filename() const { return filename_; }
  inline bool IsFilp() const { return flip_; }

private:
  // 对于渲染器中的引用
  dx::DxTexture* texture_ = nullptr;
  // 贴图的类型
  dx::TextureType type_;
  // 贴图的文件位置
  std::string filename_;
  // 是否需要反转？
  bool flip_;
};

using TexturePtr = std::unique_ptr<Texture>;
} // namespace ifire::game